classdef jwlong_34460a_class
    % 修改时间： 20240620_08h18m14s
    %     instrreset
    % 执行连接函数
    %     multimeter=jwlong_34460a_class.Conect(...
    %         keysight','USB0::0x2A8D::0x1601::MY60000299::0::INSTR');
    
    properties
        obj % 连接仪器的对象       
        idn % 保存仪器的编号      
    end
    
    methods
        function jwl = jwlong_34460a_class
            %  构造此类的实例
        end
    end
    
    methods(Static)%不需要创建对象，也可以直接调用的函数
        function jwl = Conect(company,visa_address)
            jwl=jwlong_34460a_class();
            % 连接仪器，同时读取仪器编号
            jwl.obj=visa(company,visa_address);
            MAXPOINT = 3001;
            jwl.obj.InputBufferSize = 11+14*MAXPOINT+20;
            fopen(jwl.obj);
            fprintf(jwl.obj,'*IDN?');
            jwl.idn = fscanf(jwl.obj);
        end
    end
    
    methods   % 创建对象后才可以调用的函数
        function SendMessage(jwl,command)
            % 发送命令
            fprintf(jwl.obj,command);
        end
        
        function y=SendAndReadMessage(jwl,query)
            % 发送并且读取字符串信息
            fprintf(jwl.obj,query);
            y=fscanf(jwl.obj);
        end
        
        function num=SendAndReadNumber(jwl,query)
            % 发送并且读取字符串信息
            fprintf(jwl.obj,query);
            str=fscanf(jwl.obj);
            num=str2double(str);
        end
                
        function SetCurrDC(jwl)
            % 设置 DC档的电流测试 自动选量程
            fprintf(jwl.obj,'CONF:CURR:DC AUTO;\n');  % DC档 电流测试 自动选量程
            fprintf(jwl.obj,'SAMP:COUN 1;\n');  % 设置平均数
%             fprintf(multimeter.obj,'INIT;\n'); %设置触法模式
        end   
        
        function SetCurrDCmA(jwl,range)
            % 设置 DC档的电流测试 自动选量程
            fprintf(jwl.obj,['CONF:CURR:DC ',num2str(range),' mA;\n']);  % DC档 电流测试 自动选量程
            fprintf(jwl.obj,'SAMP:COUN 1;\n');  % 设置平均数
%             fprintf(multimeter.obj,'INIT;\n'); %设置触法模式
        end          
        
        
        function [data,unit]=ReadData(jwl)
            % 读取数据data和对应的单位unit  
            fprintf(jwl.obj,'INIT;\n'); %设置触法模式
            fprintf(jwl.obj,'FETC?;\n'); 
            % 等待测量完成并将所有可用的测量结果复制到仪器的输出缓冲区。
            % 读数保留在读数存储器中。
            readdata1=fscanf(jwl.obj);
            data=str2double(readdata1);
            fprintf(jwl.obj,'DATA:LAST?;\n');
            % 返回最后一次进行的测量。
            % 您可以在任何时间执行此查询，即使在一系列测量过程中。
            readdata2=fscanf(jwl.obj);
            str=strsplit(readdata2,{' ','\n'});
            unit=char(str(2));               
        end
        
        
    end
end

